home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / turbodos.arc / README.DOC < prev    next >
Text File  |  1985-12-13  |  7KB  |  163 lines

  1. Introduction:
  2. ------------
  3.  
  4. This library contains procedures which allow you to execute DOS
  5. commands and many other programs from within a running Turbo Pascal
  6. program.  The assembler routine TURBORUN.COM performs the
  7. actual execution of the external commands via DOS function 4B.  The
  8. sample Turbo Pascal program PIBDODOS demonstrates how to use TURBORUN.COM
  9. in two different ways:
  10.  
  11.      (1)  To directly perform a selected command;
  12.      (2)  To start up a secondary command processor so that
  13.           any set of commands can be executed.  Control is
  14.           returned to the Turbo routine PIBDODOS by entering EXIT.
  15.  
  16. Files:
  17. -----
  18.  
  19. Libbrary PIBDODOS.LBR contains the following files:
  20.  
  21.      README.DOC   --- what you are reading now.
  22.      PIBDODOS.PQS --- squeezed Turbo Pascal routine showing
  23.                       how to use TURBORUN.COM (see below).
  24.      TURBORUN.COM --- Assembled external routine for invoking
  25.                       DOS commands from Turbo Pascal.
  26.      TURBORUN.AQM --- Squeezed assembler source from which
  27.                       TURBORUN.COM was created.
  28.  
  29. PIBDODOS.PQS and TURBORUN.AQM are both squeezed files.  They were
  30. squeezed without the time and date stamp, so your favorite
  31. unsqueezer should have no difficulty.  I especially recommend
  32. Alan Losoff's ALUSQ.COM.
  33.  
  34. Credits:
  35. -------
  36.  
  37. The external routine TURBORUN.COM was written by John Cooper and
  38. John Falconer.  The sample routine PIBDODOS was written by Philip R. Burns.
  39. Cooper and Falconer provided a sample routine, but theirs required
  40. that COMMAND.COM be present in the active directory in order to work,
  41. and they did not show how to bring up a secondary command processor.
  42.  
  43. What PIBDODOS does:
  44. ------------------
  45.  
  46. PIBDODOS first searches the DOS environment string for COMSPEC= to
  47. obtain the current location of COMMAND.COM.  It then prompts for a
  48. command to execute. If a command is entered, then it is passed to DOS
  49. for execution, if possible.  After the command is executed, control returns
  50. to PIBDODOS.  If no command is entered -- i.e., a null line is input --
  51. then PIBDODOS brings up a secondary DOS command processor.  DOS commands
  52. may be entered as desired.  Entering 'EXIT' returns control to
  53. PIBDODOS. PIBDODOS then prompts for another command to execute, and so on,
  54. until 'END' is entered.
  55.  
  56. Using PIBDODOS:
  57. --------------
  58.  
  59. You may use the file TURBORUN.COM as provided in the library.  If you
  60. prefer, you may extract the deck TURBORUN.AQM, unsqueeze it, and follow
  61. the directions in that deck's comments to produce TURBORUN.COM.
  62.  
  63. Unsqueeze PIBDODOS.PQS --> PIBDODOS.PAS.  Invoke Turbo Pascal,
  64. making sure that TURBORUN.COM is in the same directory as PIBDODOS.PAS.
  65. Compile PIBDODOS.PAS to a .COM file, and also set the maximum heap
  66. size (Axxxx in O)ptions) to what the Turbo program will need to
  67. execute.  Any remaining memory will be used for executing external
  68. commands.
  69.  
  70. You can find out more information by reading the comments in the
  71. source file TURBORUN.ASM.
  72.  
  73. Glitches:
  74. --------
  75.  
  76. There are some glitches with the approach used by PIBDODOS/TURBORUN.
  77. DOS may freeze up if there is not enough memory to execute the command,
  78. or if the command clobbers memory that does not belong to it.  In these
  79. cases, a re-boot is required.
  80.  
  81. Comments:
  82. --------
  83.  
  84. Send comments, suggestions, etc. to PHILIP BURNS on either of the
  85. following two Chicago BBSs:
  86.  
  87.        Gene Plantz's BBS (312) 882 4227
  88.        Ron Fox's BBS     (312) 940 6496
  89.  
  90. If you find a problem in TURBORUN.ASM, you may also want to notify
  91. Cooper and Falconer -- their address is in the comments of TURBORUN.ASM.
  92.  
  93. Thanks,
  94. Phil Burns
  95. April, 1985
  96.  
  97. Update: April 28, 1984
  98.  
  99. Turborun.asm and Turborun.com have been updated as follows:
  100.  
  101. Modified Turborun to work with both 2.0 and 3.0 versions of Turbo Pascal.
  102. This required a new method of locating Turbo's maximum stack segment size.
  103. TP 2.0 stores this 7 bytes ahead of the beginning of actual user code, but
  104. version 3.0 stores it 20 bytes ahead.  Fortunately, both versions store a
  105. pointer to the user code area at MemW[Cseg:$101].  SSMax is located at
  106. MemW[Cseg:$101] + $112.  From Turbo, SSMax can be obtained with the code:
  107.  
  108. Procedure Dummy(var SSMax : integer);
  109. var
  110.    User  : integer;
  111. begin
  112.    User := MemW[Cseg:$101];
  113.    SSMax := MemW[Cseg:User + $112];
  114. end;
  115.  
  116. Keep in mind that if your maximum stack size is greater than MaxInt (32767),
  117. or 524,272 bytes, SSMax will be NEGATIVE.  (If your reading this Phillipe
  118. Kahn, how about an unsigned integer scalar type in the next release ?  You
  119. could call it WORD with a max value of 65535.  Come to think of it, a
  120. DOUBLE WORD would also come in handy.....)
  121.  
  122. With the change in locating SSMax, the placement of your proc which calls
  123. the EXTERNAL program Turborun is no longer important.  In order to demonstrate
  124. this fact, I have made a slight modification to PibDoDos.pas.  User code now
  125. begins with the function UpCaseStr.  RunExt follows UpCaseStr.
  126.  
  127. I have recompiled PibDoDos under Turbo Pascal 2.0B and 3.0B.  The only
  128. apparent difference is that 3.0 no longer clears the screen.  It has been
  129. sucessfully run on an IBM PC with a GLC (Pegasus) 10M hard disk and on a
  130. Compaq Plus.
  131.  
  132.  
  133. Note on compiling under Turbo Pascal 2.0B:
  134. ------------------------------------------
  135.  
  136. This version contains a bug which is evident when compiling an EXTERNAL COM
  137. program.  You have to compile twice.  The first time simply compile with no
  138. options to memory.  Then select O, C, I ####, A ####, Q, C.  #### represents
  139. your minimum and maximum stack sizes.  The resulting COM file will run
  140. correctly.  3.0 doesn't require the memory compile.
  141.  
  142. Acknowledgement:
  143. ----------------
  144.  
  145. This work is heavily based on the prior work done by Mssrs Cooper, Falconer
  146. and Burns.
  147.  
  148. I was able to discover a version-independent method of locating SSMax by
  149. analysing the code of a set of programs collectively known as TurboLink,
  150. marketed by Pathfinder Software Inc.  TurboLink is advertised to allow
  151. up to 576k of Turbo Pascal Code to be resident, and to be accessed from
  152. a central program written in Turbo Pascal, Compiled Basic or Interpreted
  153. Basic.  The only problem is that the version I have (2.0) will not work
  154. with a system with more than 512k of ram (They forgot about Maxint).
  155. Squeezing 576k of Turbo code plus a central program into a 512k machine
  156. should be quite a trick!  In any case, Pathfinder uses the method of locating
  157. SSMax that I have incorporated into Turborun.asm.
  158.  
  159.  
  160. Thomas P. Devitt
  161. Pseudonym Software
  162. (818) 796-7933
  163.